home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 July / CD 3 / redhat-6.2.iso / RedHat / instimage / usr / lib / anaconda / iw / mouse.py~ < prev    next >
Encoding:
Text File  |  2000-03-08  |  7.1 KB  |  225 lines

  1. from gtk import *
  2. from iw import *
  3. from string import *
  4. from re import *
  5. import tree
  6. from translate import _
  7. import xmouse
  8.  
  9. class MouseWindow (InstallWindow):
  10.  
  11.     def reduce_leafs (self, a):
  12.         if a == (): return a
  13.         if len (a) > 1 and isinstance (a[1], type (())) and len (a[1]) == 1:
  14.             return ("%s - %s" % (a[0], a[1][0]),) + self.reduce_leafs (a[2:])
  15.         return (a[0],) + self.reduce_leafs (a[1:])
  16.  
  17.     def build_ctree (self, list, cur_parent = None, prev_node = None):
  18.         if (list == ()): return
  19.         
  20.         if (len (list) > 1 and isinstance (list[1], type (()))): 
  21.         leaf = FALSE
  22.         else:
  23.         leaf = TRUE
  24.     
  25.         if isinstance (list[0], type (())):
  26.             self.build_ctree (list[0], prev_node, None)
  27.             self.build_ctree (list[1:], cur_parent, None)
  28.         else:
  29.             index = find (list[0], " - ")
  30.             if index != -1:
  31.                 list_item = list[0][0:index] + list[0][index+2:]
  32.             else:
  33.                 list_item = list[0]
  34.             node = self.ctree.insert_node (cur_parent, None, (list_item,), 2, is_leaf=leaf)
  35.             self.ctree.node_set_row_data (node, list[0])
  36.             self.build_ctree (list[1:], cur_parent, node)
  37.  
  38.     def selectMouse (self, ctreeNode, mouseNode):
  39.         if len (ctreeNode) == 0 or len (mouseNode) == 0: return
  40.         
  41.         nodeLabel = self.ctree.get_node_info (ctreeNode[0])[0]
  42.         if nodeLabel == mouseNode[0]:
  43.             if len (mouseNode) == 1:
  44.                 self.ctree.select (ctreeNode[0])
  45.                 return
  46.             else:
  47.                 self.ctree.expand (ctreeNode[0])
  48.                 self.selectMouse (ctreeNode[0].children, mouseNode[1:])
  49.         else:
  50.             self.selectMouse (ctreeNode[1:], mouseNode)
  51.  
  52.     def __init__ (self, ics):
  53.     InstallWindow.__init__ (self, ics)
  54.  
  55.         ics.setTitle (_("Mouse Configuration"))
  56.         ics.readHTML ("mouse")
  57.         ics.setNextEnabled (TRUE)
  58.  
  59.     def getCurrentKey (self):
  60.         if not len (self.ctree.selection): return
  61.         name = ""
  62.         node = self.ctree.selection[0]
  63.         while node:
  64.             name = self.ctree.node_get_row_data (node) + name
  65.             node = node.parent
  66.             if node:
  67.                 name = " - " + name
  68.  
  69.     if self.locList.selection:
  70.         self.serialDevice = self.locList.get_text (self.locList.selection[0], 0)
  71.     # otherwise, just leave the old selection in place
  72.  
  73.         return name
  74.  
  75.     def getNext (self):
  76.     if not self.__dict__.has_key("availableMice"): return
  77.     cur = self.getCurrentKey()
  78.     (gpm, xdev, device, emulate) = self.availableMice[cur]
  79.         self.todo.mouse.set (cur, self.emulate3.get_active ())
  80.     if (device == "ttyS"):
  81.         self.todo.mouse.setDevice(self.serialDevice)
  82.     else:
  83.         self.todo.mouse.setDevice(device)
  84.  
  85.     cur = self.getCurrentKey()
  86.     (gpm, xdev, device, emulate) = self.availableMice[cur]
  87.  
  88.         curmouse = xmouse.get()
  89.         curmouse[0] = "/dev/" + device
  90.         # XXX
  91.         # IntelliMouse requires a full mouse reinit - X does not
  92.         # handle this properly from the mouse extention at this time
  93.         # so leave it a PS/2.
  94.         if not xdev == "IMPS/2":
  95.             curmouse[1] = xdev
  96.         curmouse[6] = emulate
  97.         apply (xmouse.set, curmouse)
  98.  
  99.         return None
  100.     
  101.     def selectDeviceType(self, *args):
  102.     self.ics.setNextEnabled (TRUE)
  103.  
  104.     def selectMouseType (self, widget, node, *args):
  105.         if not node.is_leaf:
  106.         self.locList.unselect_all ()
  107.         self.locList.set_sensitive (FALSE)
  108.             self.emulate3.set_sensitive (FALSE)
  109.             self.ics.setNextEnabled (FALSE)
  110.         return
  111.  
  112.     cur = self.getCurrentKey()
  113.     if (not self.availableMice.has_key(cur)):
  114.             self.ics.setNextEnabled (FALSE)
  115.         return
  116.  
  117.         self.emulate3.set_sensitive (TRUE)
  118.     (gpm, xdev, device, emulate) = self.availableMice[cur]
  119.         self.emulate3.set_active (emulate)
  120.     if device == "ttyS":
  121.         if (self.serialDevice):
  122.         self.locList.select_row(int(self.serialDevice[4]), 1)
  123.         self.ics.setNextEnabled (TRUE)
  124.         else:
  125.         self.locList.unselect_all()
  126.         self.ics.setNextEnabled (FALSE)
  127.  
  128.         self.locList.set_sensitive (TRUE)
  129.     else:
  130.         self.locList.unselect_all()
  131.         self.locList.set_sensitive(FALSE)
  132.         self.ics.setNextEnabled (TRUE)
  133.  
  134.     def getScreen (self):
  135.     self.availableMice = self.todo.mouse.available()
  136.         sorted_mice_keys = self.availableMice.keys()
  137.         sorted_mice_keys.sort ()
  138.  
  139.         currentDev = self.todo.mouse.getDevice ()
  140.     (currentMouse, emulate3) = self.todo.mouse.get ()
  141.  
  142.     deviceList = [ ("/dev/ttyS0 (COM1 under DOS)", "ttyS0" ),
  143.                    ("/dev/ttyS1 (COM2 under DOS)", "ttyS1" ),
  144.                ("/dev/ttyS2 (COM3 under DOS)", "ttyS2" ),
  145.                ("/dev/ttyS3 (COM4 under DOS)", "ttyS3" ) ]
  146.  
  147.         self.emulate3 = GtkCheckButton (_("Emulate 3 Buttons"))
  148.         box = GtkVBox (FALSE)
  149.         
  150.         sw = GtkScrolledWindow ()
  151.         sw.set_border_width (5)
  152.         sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC)
  153.         self.locList = GtkCList (2, ("Port", "Device"))
  154.         self.locList.set_selection_mode (SELECTION_SINGLE)
  155.  
  156.     for (descrip, dev) in deviceList:
  157.         self.locList.append((dev, descrip))
  158.  
  159.         self.locList.columns_autosize ()
  160.         self.locList.set_column_resizeable (0, FALSE)
  161.         self.locList.column_title_passive (0)
  162.         self.locList.column_title_passive (1)
  163.         self.locList.set_border_width (5)
  164.  
  165.         sw = GtkScrolledWindow ()
  166.         sw.set_border_width (5)
  167.         sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC)
  168.         self.ctree = GtkCTree (1)
  169.  
  170.         groups = ()
  171.         for x in sorted_mice_keys:
  172.             groups = tree.merge (groups, string.split (x, " - ", 1))
  173.         groups = self.reduce_leafs (groups)
  174.  
  175.         self.build_ctree (groups)
  176.         self.ctree.set_selection_mode (SELECTION_BROWSE)
  177.         self.ctree.columns_autosize ()
  178.         self.ctree.connect ("tree_select_row", self.selectMouseType)
  179.         self.locList.connect ("select_row", self.selectDeviceType)
  180.     self.locList.set_sensitive(FALSE)
  181.  
  182.         sw.add (self.ctree)
  183.     
  184.     if (currentDev and currentDev[0:4] == "ttyS"):
  185.         self.serialDevice = currentDev
  186.         self.locList.select_row(int(self.serialDevice[4]), 1)
  187.     else:
  188.         self.locList.unselect_all();
  189.         self.serialDevice = None
  190.  
  191.     splitv = string.split (currentMouse, " - ", 1)
  192.     nodes = self.ctree.base_nodes ()
  193.         # do a simple search on the root nodes, since leaf reduction creates
  194.         # a special case
  195.         found = 0
  196.     for x in nodes:
  197.             if self.ctree.get_node_info (x)[0] == "%s %s" % tuple (splitv):
  198.                 found = 1
  199.                 self.ctree.select (x)
  200.                 break
  201.         if not found:
  202.             self.selectMouse (nodes, splitv)
  203.  
  204.         self.emulate3.set_active (emulate3)
  205.  
  206.         align = GtkAlignment ()
  207.         align.add (self.emulate3)
  208.         align.set_border_width (5)
  209.  
  210.         im = self.ics.readPixmap ("gnome-mouse.png")
  211.         if im:
  212.             im.render ()
  213.             pix = im.make_pixmap ()
  214.             a = GtkAlignment ()
  215.             a.add (pix)
  216.             a.set (0.0, 0.0, 0.0, 0.0)
  217.             box.pack_start (a, FALSE)
  218.             
  219.         box.pack_start (sw)
  220.         box.pack_start (self.locList, FALSE)
  221.         box.pack_start (align, FALSE)
  222.  
  223.         return box
  224.  
  225.